意法半导体 STM32F103C8T6 标准外设库典型实例 |
您所在的位置:网站首页 › stm32f103c8t6 spi › 意法半导体 STM32F103C8T6 标准外设库典型实例 |
笔者半年之前的一篇长文,所介绍的STC51系列单片机是一款结构简单、易于学习的嵌入式微控制器,但是由于标准 8051 架构诞生于 70 年代,其硬件架构、资源数量以及编程方式都已显老旧,成本和性能方面也皆落后于其它架构产品,市场占有率逐步遭到侵蚀,目前仅常见于一些教学与发烧友使用的范畴。伴随近几年物联网行业的快速兴起,STM32等基于 ARM Cortex 内核的微控制器,凭借丰富的片上资源与简单易用的标准外设库,逐步成为消费与工业领域中的主流产品。 意法半导体成立于 1987 年,由意大利 SGS 和法国 Thomson 两家半导体企业合并而成,本文所介绍的STM32F103C8T6属于该公司应用极为广泛的型号,其提供的STM32F10x Standard Peripheral Library标准外设库对 STM32 片上资源进行了完善的封装,相对于 ST 公司目前力推的HAL/LL库,标准外设库更加接近于传统的寄存器操作,因而也较为容易向兆易创新的GD32等国产微控制器移植。 由于知乎的markdown写作工具不支持完整的表格以及书签语法,加上篇幅字数限制,因此在这里只发布了第1、2章节的部分内容,需要查阅带有书签的完整文章请前往笔者的博客Github Pages: 欢迎优秀原创技术类、IT产业经济类文章向知乎【成都IT圈】专栏进行投稿。欢迎大家关注公众号【IT圈】:Electronics, Embedded & Web 获取更多电子技术、嵌入式系统、Web开发相关的原创性文章: STM32F103C8T6基于 ARM 32 位 Cortex™-M3 内核,使用2.0V ~ 3.6V电压供电,工作频率最高可以达到72MHz,内部采用64K或128K字节 Flash 程序存储器,以及高达20K字节的 SRAM 数据存储器;内置 CRC 循环冗余校验以及 96 位编码(即 24 位的十六进制数)的芯片唯一序列号(例如:52FF69067871515237582567)。 其主系统主要由 4 个控制单元(DCode 总线D-bus、系统总线S-bus、通用DMA1、通用DMA2)以及 4 个受控单元(内部SRAM、内部Flash、FSMC、AHB 到 APB 的桥AHB2APBx)组成,它们通过一个多级的 AHB 总线相互进行连接,如下图所示: 由于 STM32 外设资源众多,工作的时钟频率各不相同,所以采用了多达 5 个时钟源:片上经过出厂调校的8MHz RC 振荡器系统时钟HSI,以及带校准的40kHz RC 振荡器作为实时时钟LSI,也可以采用外置4 ~ 16MHz晶体振荡器作为系统时钟HSE,以及带校准功能的32kHz RTC 振荡器作为实时时钟LSE;最后还内置了用于对 CPU 时钟进行倍频的的PLL锁相环。 下面是外部高速时钟源HSE的交流时序图,注意图中Tʜsᴇ标识的部分为一个系统时钟周期。 下图当中,当HSI作为PLL时钟的输入时,最高系统时钟频率只能达到64MHz。当使用 USB 功能时,必须同时使用HSE和PLL,并且 CPU 的频率必须为48MHz或72MHz。当需要的ADC采样时间为1μs的时候,**APB2**必须设置为14MHz、28MHz或56MHz。 STM32F103C8T6采用 LQFP48 方式封装,一共拥有 37 个 I/O 引脚,被分为PA(15 个)、PB(15 个)、PC(3 个)、PD(2 个)、PE(0 个)五个组,所有 I/O 接口可以映像到 16 个外部中断,并且大部份端口都可以可以兼容5V信号。每个 I/O 端口可以接受或输出8mA电流,灌电流则可达到20mA,下面是详细的引脚定义图: 每个 GPIO 端口都拥有两个 32 位配置寄存器GPIOx_CRL和GPIOx_CRH,两个 32 位数据寄存器GPIOx_IDR和GPIOx_ODR,一个 32 位置位/复位寄存器GPIOx_BSRR和一个 16 位复位寄存器GPIOx_BRR和一个 32 位锁定寄存器GPIOx_LCKR。 GPIO 端口的每个位都可以通过软件将其配置为输出(推挽输出GPIO_Mode_Out_PP、开漏输出GPIO_Mode_Out_OD)、输入(浮空输入GPIO_Mode_IN_FLOATING、上拉输入GPIO_Mode_IPU、下拉输入GPIO_Mode_IPD、模拟输入GPIO_Mode_AIN)、复用(复用推挽输出GPIO_Mode_AF_PP、复用开漏输出GPIO_Mode_AF_OD)功能。 除具有模拟输入功能的引脚之外,所有 GPIO 都拥有大电流通过能力。必要时可以对 GPIO 进行锁定,以避免意外擦写 GPIO 相关的寄存器。位于APB2上的 GPIO 引脚,其脉冲转换速度可达18MHz。 定时器STM32F103C8T6拥有 7 个定时器,其中 1 个用于电机控制的 16 位 PWM 高级控制定时器、3 个 16 位通用定时器、2 个看门狗定时器(包含独立型的和窗口型)、1 个 24 位自减型系统嘀嗒定时器。 STM32F103C8T6拥有 2 个 I²C 接口、3 个 USART 接口、2 个 SPI 接口、1 个 CAN 接口、1 个 USB 2.0 全速接口。 DMA(直接内存存取,Direct Memory Access)用来提供在外设与存储器或者存储器与存储器之间的高速数据传输,传输过程无需经过 CPU 进行干预,数据直接通过 DMA 快速进行操作,从而节省大量 CPU 资源。 STM32F103C8T6的最小系统电路由电源电路、复位电路、时钟电路、程序下载电路4 部份组成,具体请参考下面的电路图: 电源电路:STM32F103C8T6拥有三路逻辑电源VDD_1、VDD_2、VDD_3和一路模拟电源VDDA(由于当前实验电路对于模拟电压的读取精度无特殊要求,所以模拟电源与逻辑电源可以共用)。此外,VBAT引脚上还连接了一枚3V纽扣电池BT1,用于为内部的 RTC 时钟供电。而后续串接的去耦电容C1、C3、C3、C4则主要用于稳定电源以及滤除杂波。STM32F103C8T6使用的3V电压是通过AMS1117-3V稳压芯片获得,该芯片将计算机 Micro USB 接口的5V供电电压转换为3.3V电压,然后将这个3.3V电压连接至继电器J1的开关控制位。 复位电路:STM32F103C8T6内部已经拥有一个上电复位电路,但是生产环境下为了防止复位引脚悬空,通常还是会连接一组由电容C9电阻R7共同组成的 RC 外部复位电路,而手动外部复位则是通过后续连接的微动开关K1(即实验电路里的复位按键)来完成。 时钟电路:频率为8MHz的晶振TX1是外部系统时钟,由C5和C6两枚电容协助起震;频率为32.768KHz的晶振TX2用于外部RTC实时时钟电路,由C7和C8两枚电容协助起震。 程序下载电路:芯片STC15W201S用于切换单片机启动模式,实现 ASP 程序自动下载;STM32F103C8T6使用 USART 串口为单片机下载程序,实验电路中 USB 转 TTL 电平模块的TXD和RXD引脚分别连接至单片机的PA10/USART1_RX和PA9/USART1_TX,GND引脚与单片机的VSS_1、VSS_2、VSS_3、VSSA共同接地。 STM32F103C8T6通过BOOT0与BOOT1两个引脚的电平状态组合,选择何时接收串口传送过来的程序以及何时运行这些程序,即设置微控制器的启动方式。当按键K1处于弹起状态时,将会拉低STC15W201S的ASPK引脚的电平状态,而STC15W201S的ASPL引脚连接了一枚 LED 状态指示灯并接入 GND,通过STC15W201S单片机控制STM32F103C8T6的BOOT0、BOOT1引脚电平状态,进而实现程序的自动下载。 由于知乎的markdown写作工具不支持完整的表格以及书签语法,加上篇幅字数限制,因此在这里只发布了第1、2章节的部分内容,需要查阅带有书签的完整文章请前往笔者的博客Github Pages: 欢迎优秀原创技术类、IT产业经济类文章向知乎【成都IT圈】专栏进行投稿。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |